﻿using System;
using System.ComponentModel.DataAnnotations;
using System.Globalization;

namespace Data
{
    public enum TrangThai
    {
        // trạng thái phòng mẫu
        [Display(Name = "Tạo mới")]
        PhongMau_TaoMoi = 0,
        [Display(Name = "Không duyệt")]
        PhongMau_KhongDuyet = 1,
        [Display(Name = "Phòng mẫu đã duyệt")]
        PhongMau_DuyetSanPham = 2,
        [Display(Name = "Phòng lệnh đã nhận từ phòng mẫu")] // dùng để insert vào hành trình
        PhongMau_PhongLenhDaNhan = 3,
        [Display(Name = "Phòng lệnh đã tạo lệnh")]
        PhongMau_PhongLenhDaTaoLenh = 4,
        [Display(Name = "Chờ duyệt xuất")]
        PhongMau_ChoDuyet = 5,
        [Display(Name = "Sản phẩm đã sản xuất xong")]
        PhongMau_ThanhPham = 6,

        // trạng thái phòng lệnh
        [Display(Name = "Tạo mới")]
        LenhSanXuat_TaoMoi = 7,
        [Display(Name = "Lệnh chờ duyệt")]
        LenhSanXuat_ChoDuyet = 8,
        [Display(Name = "Lệnh không được duyệt")]
        LenhSanXuat_TuChoiDuyet = 9,
        [Display(Name = "Lệnh đã được duyệt và gửi xuống phòng kho")]
        LenhSanXuat_ChotLenh = 10,
        [Display(Name = "Phòng cắt đã nhận lệnh")] // dùng để insert vào hành trình
        LenhSanXuat_DaNhanLenh = 11,
        [Display(Name = "Phòng cắt đã cập nhật lệnh")]
        LenhSanXuat_DaCapNhat = 12,
        [Display(Name = "Phòng cắt đã gửi đi")] // thừa chưa dùng
        LenhSanXuat_PhongCatDaGuiDi = 13,
        [Display(Name = "Đã cập nhật vào kho và gửi xuống phòng cắt")]
        LenhSanXuat_CapNhatKho = 14,

        // trạng thái phòng cắt
        [Display(Name = "Phòng cắt tạo mới")]
        Cat_TaoMoi = 15,
        [Display(Name = "Đã gửi phòng gia công")]
        Cat_GuiGiaCong = 16,
        [Display(Name = "Đã gửi phòng may khoán")]
        Cat_GuiMayKhoan = 17,
        [Display(Name = "Phòng gia công đã nhận")] // chỉ dùng để insert vào hành trình
        Cat_GiaCongDaNhan = 18,
        [Display(Name = "Phòng may khoán đã nhận")] // chỉ dùng để insert vào hành trình
        Cat_MayKhoanDaNhan = 19,
        [Display(Name = "Phòng gia công đã cập nhật")]
        Cat_GiaCongDaCapNhat = 20,
        [Display(Name = "Phòng may khoán đã cập nhật")]
        Cat_MayKhoanDaCapNhat = 21,

        // trạng thái phòng gia công ngoài
        [Display(Name = "Phòng gia công tạo mới")]
        GiaCong_TaoMoi = 22,
        [Display(Name = "Đã gửi KCS")]
        GiaCong_GuiDi = 23,
        [Display(Name = "Phòng KCS đã duyệt")] // thừa chưa dùng
        GiaCong_KCSDaDuyet = 24,
        [Display(Name = "Phòng KCS không duyệt")]
        GiaCong_KCSKhongDuyet = 25,

        // trạng thái phòng may khoán
        [Display(Name = "Phòng may khoán tạo mới")]
        MayKhoan_TaoMoi = 26,
        [Display(Name = "Đã gửi KCS")]
        MayKhoan_GuiDi = 27,
        [Display(Name = "Phòng KCS đã duyệt")] // thừa chưa dùng
        MayKhoan_KCSDaDuyet = 28,
        [Display(Name = "Phòng KCS không duyệt")]
        MayKhoan_KCSKhongDuyet = 29,

        // trạng thái phòng KCS
        [Display(Name = "Phòng KCS đã duyệt")]
        KCS_DaDuyet = 30,
        [Display(Name = "Phòng hoàn thiện đã nhận")] // chỉ dùng để insert vào hành trình
        KCS_HoanThienDaNhan = 31,
        [Display(Name = "Phòng hoàn thiện đã cập nhật")]
        KCS_HoanThienDaCapNhat = 32,

        // trạng thái phòng hoàn thiện
        [Display(Name = "Phòng hoàn thiện tạo mới")]
        HoanThien_TaoMoi = 33,
        [Display(Name = "Phòng hoàn thiện đã gửi thành phẩm")]
        HoanThien_DaGui = 34,

        //trang thai thanh pham
        [Display(Name = "Phòng phòng thành phẩm đã cập nhật")]
        ThanhPham_CapNhat = 99,

        // trạng thái phiếu yêu cầu
        [Display(Name = "Phiếu yêu cầu tạo mới")]
        PhieuYeuCau_TaoMoi = 35,
        [Display(Name = "Phiếu yêu cầu chờ xử lý")]
        PhieuYeuCau_ChoXuLy = 36,
        [Display(Name = "Đã duyệt hủy và cấp thêm")]
        PhieuYeuCau_DuyetCapThem = 37,
        [Display(Name = "Đã duyệt hủy")]
        PhieuYeuCau_DuyetHuy = 38,
        [Display(Name = "Đã nhận vật tư trả lại")]
        PhieuYeuCau_CapNhatTraLai = 39,

        [Display(Name = "Phiếu xin cấp thêm vật tư")] // chỉ dùng để insert vào hành trình
        PhieuYeuCau_CapThem = 40,
        [Display(Name = "Phiếu trả lại vật tư")] // chỉ dùng để insert vào hành trình
        PhieuYeuCau_TraLai = 41,
        [Display(Name = "Phiếu yêu cầu đã được duyệt")]
        PhieuYeuCau_DuyetPhieu = 45,
        [Display(Name = "Phiếu yêu cầu không được duyệt")]
        PhieuYeuCau_HuyDuyet = 42,
        [Display(Name = "Phiếu yêu cầu đã cập nhật vào kho")]
        PhieuYeuCau_CapNhatKho = 43,
        [Display(Name = "Phiếu yêu cầu không được cập nhật vào kho")]
        PhieuYeuCau_HuyCapNhatKho = 44
    }

    public enum TrangThaiKho
    {
        [Display(Name = "Phiếu xuất kho tạo mới")]
        XuatKho_TaoMoi = 1,
        [Display(Name = "Phiếu xuất kho chờ cập nhật")]
        XuatKho_ChoDuyet = 2,
        [Display(Name = "Phiếu xuất kho đã cập nhật")]
        XuatKho_DaDuyet = 3,
        [Display(Name = "Phiếu xuất kho không cập nhật")]
        XuatKho_KhongDuyet = 4,

        [Display(Name = "Phiếu chuyển kho tạo mới")]
        ChuyenKho_TaoMoi = 5,
        [Display(Name = "Phiếu chuyển kho chờ cập nhật")]
        ChuyenKho_ChoDuyet = 6,
        [Display(Name = "Phiếu chuyển kho đã cập nhật")]
        ChuyenKho_DaDuyet = 7,
        [Display(Name = "Phiếu chuyển kho không cập nhật")]
        ChuyenKho_KhongDuyet = 8
    }

    public enum LoaiVatTu
    {
        [Display(Name = "Cắt may")]
        CatMay = 1,
        [Display(Name = "Hoàn thiện")]
        HoanThien = 2
    }

    public enum LoaiPhieuYeuCau
    {
        [Display(Name = "Xin cấp thêm v.tư")]
        CapThem = 1,
        [Display(Name = "Trả lại vật tư")]
        TraLai = 2,
        [Display(Name = "Hủy số lượng sản phẩm")]
        HuySanPham = 3
    }

    public enum PhongBan
    {
        [Display(Name = "Phòng mẫu")]
        PhongMau = 99,
        [Display(Name = "Phòng lệnh")]
        PhongLenh = 98,
        [Display(Name = "Phòng cắt")]
        PhongCat = 97,
        [Display(Name = "Phòng gia công")]
        PhongGiaCong = 96,
        [Display(Name = "Phòng may khoán")]
        PhongMayKhoan = 95,
        [Display(Name = "Phòng KCS")]
        PhongKCS = 94,
        [Display(Name = "Phòng hoàn thiện")]
        PhongHoanThien = 93,
        [Display(Name = "Phòng kho")]
        KhoSX = 92
    }

    public class Common
    {
        public static string HienThiTrangThai(int trangthai)
        {
            return GetDislayName((TrangThai)trangthai);
        }

        public static string HienThiLoaiVatTu(int loaivattu)
        {
            return GetDislayName((LoaiVatTu)loaivattu);
        }

        public static string HienThiPhongBan(int phongban)
        {
            return GetDislayName((PhongBan)phongban);
        }

        public static string HienThiLoaiPhieuYeuCau(int pyc)
        {
            return GetDislayName((LoaiPhieuYeuCau)pyc);
        }

        public static string HienThiKho(int pyc)
        {
            return GetDislayName((TrangThaiKho)pyc);
        }

        private static string GetDislayName<T>(T value)
        {
            var type = typeof(T);
            var member = type.GetMember(value.ToString());
            var attributes = member[0].GetCustomAttributes(typeof(DisplayAttribute), false);
            var name = ((DisplayAttribute)attributes[0]).Name;
            return name;
        }
    }

    public class ConvertDate
    {
        public DateTime ConvertToDate(string datetime)
        {
            string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
            if (sysFormat.Equals("dd/MM/yyyy"))
            {
                return Convert.ToDateTime(DateTime.ParseExact(datetime.Remove(10, datetime.Length - 10).Trim(), "dd/M/yyyy", CultureInfo.InvariantCulture)
                            .ToString("MM/dd/yyyy", CultureInfo.InvariantCulture));
            }
            return Convert.ToDateTime(datetime);
        }
    }
}
